# -*- coding: utf-8 -*-
"""界面相关函数模块

提供获取屏幕信息和应用样式到界面组件的功能。

@Time    : 2024/8/15 19:05
@Author  : 徐良
@File    : interface_style.py
"""

from PySide6.QtWidgets import QWidget
from typing import Optional
import logging
from css.blue_basic_tone import tableview1_style
# 导入样式
from css.blue_basic_tone import (
    date_edit_style, time_edit_style, date_time_edit_style, north_tab_widget_style,
    tree_widget_style, tableview1_style, button_style, line_edit_str_style, label3_style,
    plain_text_edit_style, combox_style
)

# 导入组件
from mesParts.tabWidget.mainTab import NorthTabWidget
from mesParts.treeWidget.treeWidgets import TreeWidget1
from mesParts.tableView.tableViews import TableView1
from mesParts.button.buttons import PushButton1
from mesParts.lineEdit.lineEdits import LineEditInt, LineEditStr, LineEditDecimal
from mesParts.dateTime.dateTimes import DateEdit, DateTimeEdit, TimeEdit
from mesParts.comboBox.comboBoxs import Combox
from mesParts.lineEdit.plainTextEdits import PlainTextEdit
from mesParts.label.labels import Label3



def apply_styles(panel: QWidget, label2_style: Optional[str] = None) -> None:
    """
    将预定义的样式应用到窗口中所有子控件。

    参数：
        panel (QWidget): 需要应用样式的父级窗口或控件。
        label2_style (Optional[str]): 可选，Label2控件的自定义样式，若未提供则使用默认样式。

    异常：
        Exception: 如果应用样式时发生任何错误，将输出异常信息。
    """
    try:
        # 遍历所有子控件，并根据控件类型应用相应的样式
        for widget in panel.findChildren(QWidget):

            if isinstance(widget, DateTimeEdit):
                widget.setStyleSheet(date_time_edit_style)

            elif isinstance(widget, DateEdit):
                widget.setStyleSheet(date_edit_style)

            elif isinstance(widget, TimeEdit):
                widget.setStyleSheet(time_edit_style)


            elif isinstance(widget, NorthTabWidget):
                widget.setStyleSheet(north_tab_widget_style)

            elif isinstance(widget, TreeWidget1):
                widget.setStyleSheet(tree_widget_style)

            elif isinstance(widget, TableView1):
                widget.setStyleSheet(tableview1_style)

            elif isinstance(widget, PushButton1):
                widget.setStyleSheet(button_style)

            elif isinstance(widget, (LineEditInt, LineEditStr, LineEditDecimal)):
                widget.setStyleSheet(line_edit_str_style)

            elif isinstance(widget, PlainTextEdit):
                widget.setStyleSheet(plain_text_edit_style)

            elif isinstance(widget, Label3):
                widget.setStyleSheet(label3_style)

            elif isinstance(widget, Combox):
                widget.setStyleSheet(combox_style)


    except Exception as e:
        logging.info(f"应用样式时发生错误: {e}")


